package com.cskaoyan.javase.oop2._1extends._1relation;

/**
 * 继承中两个类的关系
 * 从属关系（relation）上来说，
 * 继承中的父子类具有 "is-a" 关系。
 * 即子类 "is-a" 父类,子类是一个父类。
 * 子类可以近似地看成是一个父类，子类可以当作父类来使用。
 *
 * 为什么呢?从以下角度解释:
 * 1.最直接的代码角度
 * 子类可以看成是一个父类,可以当成父类使用,所以可以使用父类引用指向子类对象
 *
 * 2.从数据类型的定义角度解释:
 *      数据类型是 一组数据 + 基于数据的操作
 *      引用数据类型是 成员变量的集合 + 成员方法的集合
 *      子类通过继承父类，得到了父类的所有成员，从数据类型上来说，子类就覆盖了父类的成员，具有了父类的功能。
 * 子类可以当做父类去使用，也就是子类"is-a"父类。
 *
 * 3.最直观的角度
 * Student就是Person
 * Teacher就是Person
 * Cat也是Animal
 * Dog也是Animal
 * ...
 * xxx 就是 xxx
 * 这种就是典型的"is-a"关系
 *
 * 以上，所以说，子类"is-a"关系。
 *
 * 但是要注意,子类"is-a"父类,反过来不成立,子类之所以能够当成父类
 * 是因为它继承了父类,它扩展了父类,它往往比父类更加强大
 * 但是父类和子类没有直接关系,父类绝大多数情况下都不能当成子类去使用
 *
 *
 * @since 15:04
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        /*
            之前创建对象时
            引用的类型和对象的类型都是严格保持一致
            但实际上并不需要一定如此
         */
        Father f = new Father();
        Son s = new Son();
        // 子类可以看成是一个父类,可以当成父类使用,所以可以使用父类引用指向子类对象
        Father fs = new Son();

        // Son ss = new Father();
    }

}

class Father {

}

class Son extends Father {

}
